package com.billdowney.util.microsoft.office.excel;

import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.io.InputStream;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.Set;

import jxl.Sheet;
import jxl.Workbook;
import jxl.read.biff.BiffException;

/**
 * @ClassName: ExcelUtil
 * @Description: excel表格工具类
 * @author 超级小富翁 - BillDowney
 * @date 2018年5月18日 上午11:03:15
 */
public class ExcelReadUtil {

	/**
	 * @Function: readExcel
	 * @Description: 传入需要读取的excel表格路径
	 * @param filePath
	 *            文件路径
	 * @return Map<String, List<List<String>>>格式的表格数据
	 * @author: 超级小富翁 - BillDowney
	 * @date: 2018年5月18日 上午11:57:39
	 */
	public static Map<String, List<List<String>>> readExcel(String filePath) {
		return readExcel(new File(filePath));
	}

	/**
	 * @Function: readExcel
	 * @Description: 传入文件信息类并读取excel的内容
	 * @param file
	 *            包含excel的文件类
	 * @return List<Map<String, String>>读取到的内容
	 * @author: 超级小富翁 - BillDowney
	 * @date: 2018年7月16日 下午6:25:43
	 */
	public static Map<String, List<List<String>>> readExcel(File file) {
		Map<String, List<List<String>>> excelData = new HashMap<>();
		try {
			// 创建输入流，读取Excel
			InputStream is = new FileInputStream(file);
			// jxl提供的Workbook类
			Workbook wb = Workbook.getWorkbook(is);
			// 循环所有的标签页
			for (int index = 0; index < wb.getNumberOfSheets(); index++) {
				List<List<String>> sheetData = new ArrayList<>();
				// 每个页签创建一个Sheet对象
				Sheet sheet = wb.getSheet(index);
				// sheet.getRows()返回该页的总行数
				for (int i = 0; i < sheet.getRows(); i++) {
					List<String> rowData = new ArrayList<>();
					// sheet.getColumns()返回该页的总列数
					for (int j = 0; j < sheet.getColumns(); j++) {
						String cellinfo = sheet.getCell(j, i).getContents();
						rowData.add(cellinfo);
					}
					sheetData.add(rowData);
				}
				excelData.put(sheet.getName(), sheetData);
			}
		} catch (FileNotFoundException e) {
			e.printStackTrace();
		} catch (IOException e) {
			e.printStackTrace();
		} catch (BiffException e) {
			e.printStackTrace();
		}
		return excelData;
	}

	/**
	 * @Function: printExcelData
	 * @Description: 传入readExcel方法获取的表格数据并打印
	 * @param excelData
	 *            readExcel方法获取的表格数据
	 * @author: 超级小富翁 - BillDowney
	 * @date: 2018年5月18日 上午11:57:01
	 */
	public static void printExcelData(Map<String, List<List<String>>> excelData) {
		Set<String> keys = excelData.keySet();
		for (String key : keys) {
			System.out.println("sheet名称：" + key);
			List<List<String>> sheetData = excelData.get(key);
			for (List<String> rowData : sheetData) {
				for (String cellData : rowData) {
					System.out.print(cellData + "\t");
				}
				System.out.println();
			}
		}
	}
}
